﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Messaging;
using System.Threading.Tasks;
using System.Threading;

namespace AtencionMessageServer
{
    class Servidor
    {
        static void Main(string[] args)
        {
            string rutaCola = @".\private$\clinica";
            if (!MessageQueue.Exists(rutaCola))
                MessageQueue.Create(rutaCola);

            MessageQueue cola = new MessageQueue(rutaCola);
            cola.Formatter = new XmlMessageFormatter(new Type[] { typeof(Atencion) });

            while (true)
            {
                try
                {
                    Message mensaje = cola.Receive(TimeSpan.Zero);
                    Atencion atencion = (Atencion)mensaje.Body;

                    AtencionDAO dao = new AtencionDAO();

                    dao.ActualizarEstadoCita(atencion.NumeroCita, atencion.Estado);

                    Console.WriteLine("Asunto: " + mensaje.Label);
                    Console.WriteLine("Atención procesada satisfactoriamente -> Fecha: " + atencion.FechaAtencion.ToString() + ", N° cita: " + atencion.NumeroCita.ToString() + ", Estado: " + atencion.Estado);                                      
                }
                catch (MessageQueueException mqex)
                {
                    if (mqex.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
                    {
                        Thread.Sleep(2000);
                    }
                    else
                    {
                        Console.WriteLine(mqex.Message);
                        throw;
                    }
                }
            }

        }
    }

    public class Atencion
    {
        public DateTime FechaAtencion { get; set; }
        public Int32 NumeroCita { get; set; }
        public String Estado { get; set; }
    }
}
